package top.hiai.Controller;

import java.io.UnsupportedEncodingException;
import java.util.Date;

import com.jfinal.plugin.activerecord.Page;
import top.hiai.config.BaseController;
import top.hiai.model.Article;
import top.hiai.model.User;
import top.hiai.model.UserXia;
import top.hiai.service.ArcTypeService;
import top.hiai.service.ArticleService;
import top.hiai.service.UserService;
import top.hiai.util.FormatjsonUtil;

/**
* @Author www.hiai.top
* @Email  goodsking@163.com
* @Message 更多资源尽在www.hiai.top,开发者：黄康权
* @Introduction 前台文章控制器
*/

public class ArticleController extends BaseController{
	ArticleService articleService = new ArticleService();
	ArcTypeService arcTypeService = new ArcTypeService();
	UserService userService = new UserService();
	/**
	 * 用户发表文章验证
	 */
	public void addArticle(){
		User user = getSessionAttr("LoginUserCache");
		int user_id = user.getInt("uid");;//用户ID
		Date publish_date = new Date();//文章添加时间

		getModel(Article.class).setPublish_date(publish_date).setUser_id(user_id).save();
        render("/user/userArticleManage.html");
	}
	/**
	 * 个人中心中的文章管理
	 */
	public void articleListTable(){
		//获取用户的ID
		User user = getSessionAttr("LoginUserCache");
    	int uid = user.getInt("uid");
    	
    	String s_name = get("name");
    	//int s_state = Integer.parseInt(get("stste")) ;
    	//System.out.println("名称："+s_name+",状态"+s_state);
    	String s_state = get("state");
        Integer page = getParaToInt("page", 1);
        Integer limit = getParaToInt("limit", 10);
        
        Page<Article> paginate = articleService.paginateGetUserId(page, limit,uid,s_name,s_state);
        renderJson(FormatjsonUtil.layuiPage(paginate));
	}
	/**
	 * 个人中心中的文章删除
	 */
	public void deleteArticle(){
		articleService.deleteById(getParaToInt());
		redirect("/user/userArticleManage");
	}
	/**
	 * 前台文章判断用户是否已经下载过这个资源了
	 * 1.判断用户是否登录了，没有登录返回错误信息
	 * 2.判断用户是否已经下载过该资源了，如果下载了返回已经下载过的资源的信息
	 * 3.没有下载先判断用户积分是否够用，返回相应的信息
	 * 4.用户下载扣除相应的积分，发表文章的用户得到想用的积分
	 * @return 
	 * @throws UnsupportedEncodingException 
	 * 返回错误信息中，1  用户没登录  2  已经下载过  3  积分不够    4   可以下载  5去下载的界面
	 */
	public void userDownloadExist() throws UnsupportedEncodingException{
		User user = getSessionAttr("LoginUserCache");
		Article article;
		int aid = getInt("aid");
		if(user != null){
			int uid = user.getInt("uid");
			article = articleService.getCountByUserIdAndArticleId(uid,aid);
			//判断是否下载过
			if(article == null){
				renderJson("errMsg",4);
				return;
			}else{
				renderJson("errMsg",2);
				return;
			}
		}else{
			renderJson("errMsg",1);
			return;
		}
	}
	/**
	 * 这里首先判断用户登录没，用户是否下载过该资源，如果全部都不满足，证明用户要下载这个资源
	 */
	@SuppressWarnings("unused")
	public void userDownloadCkeck(){
		User user = getSessionAttr("LoginUserCache");
		int aid = getInt("aid");
		int uid = user.getInt("uid");
		Article article;
		int userPoints;//下载用户人的用户的积分
		int articlePoints; //下载的文章要使用的积分
		int uidArticle; //该文章是由哪个用户发的贴
		
		//如果没有下载，则判断用户的积分是否够用
		article = articleService.findById(aid);	//根据ID找到这篇文章
		user = userService.findById(uid);		//找到要下载文章的用户
		
		userPoints = user.getInt("points");		//用户的积分
		articlePoints = article.getInt("points") ;	//文章的积分
		uidArticle = article.getInt("user_id");	//该文章是由哪个用户发表的文章
		
		if((userPoints - articlePoints)>=0){
			/**
			 *用户可以下载
			 *1.扣除下载用户的积分
			 *2.给上传的用户添加积分
			 *3.给用户下载添加记录值
			 *4.跳转到下载的界面 
			 */
			//1.扣除下载用户的积分
			userPoints = userPoints-articlePoints;
			userService.setUserReducePoints(uid,userPoints);
			//2.给上传的用户添加积分
			int resuleId = userService.setUserAddPoints(uidArticle,articlePoints);
			
			//3.给用户下载添加记录值
			Date download_date =  new Date();		//下载时间
			getModel(UserXia.class).setDownload_date(download_date).setUser_id(uid).setArticle_id(aid).save();
			//4.跳转到下载的界面 
			renderJson("errMsg",5);
			//getModel(User.class).update();
		}else{
			renderJson("errMsg",3);
			return;
		}		
	}

	/**
	 * vip按钮下载操作
	 * 1.判断用户是否登录了
	 * 2.判断用户是不是VIP用户，
	 * 3.如果是VIP，判断是不是下载过该资源
	 * 4.如果不是，给出错误信息
	 * 返回错误信息中，1  用户没登录    2 不是VIP用户    3 已结下载过该资源了    4 没有下载，跳转到下载界面     5 下载成功
	 */
	public void userVipDownloadExist(){
		User user = getSessionAttr("LoginUserCache");
		Article article;
		int aid = getInt("aid");
		if(user != null){
			//用户登录了，判断用户是不是VIP用户
			int uid = user.getInt("uid");
			user = userService.findById(uid);
			if("true".equals(user.getStr("is_vip"))){
				//是VIP用户判断是不是下载过该资源了
				article = articleService.getCountByUserIdAndArticleId(uid,aid);
				//判断是否下载过
				if(article == null){
					renderJson("errMsg",4);
					return;
				}else{
					renderJson("errMsg",3);
					return;
				}
			}else{
				renderJson("errMsg",2);		//用户没有登录
				return;
			}
		}else{
			renderJson("errMsg",1);		//用户没有登录
			return;
		}
	}
	/**
	 * 这里是VIP下载资源，首先判断是不是VIP用户，在判断是不是已经下载过了，
	 * 然后这里就是该用户是VIP用户，但是没有下载过该资源
	 */
	public void userVipDownloadCkeck(){
		User user = getSessionAttr("LoginUserCache");
		int aid = getInt("aid");
		int uid = user.getInt("uid");
		Article article;

		int articlePoints; //下载的文章要使用的积分
		int uidArticle; //该文章是由哪个用户发的贴
		
		//如果没有下载，则判断用户的积分是否够用
		article = articleService.findById(aid);	//根据ID找到这篇文章
		user = userService.findById(uid);		//找到要下载文章的用户
		
		articlePoints = article.getInt("points") ;	//文章的积分
		uidArticle = article.getInt("user_id");	//该文章是由哪个用户发表的文章
		
			/**
			 *用户可以下载
			 *1.扣除下载用户的积分   这里VIP不需要扣除
			 *2.给上传的用户添加积分
			 *3.给用户下载添加记录值
			 *4.跳转到下载的界面 
			 */
			//1.扣除下载用户的积分
			//userPoints = userPoints-articlePoints;
			//userService.setUserReducePoints(uid,userPoints);
			
			//2.给上传的用户添加积分
			userService.setUserAddPoints(uidArticle,articlePoints);
			//3.给用户下载添加记录值
			Date download_date =  new Date();		//下载时间
			getModel(UserXia.class).setDownload_date(download_date).setUser_id(uid).setArticle_id(aid).save();
			//4.跳转到下载的界面 
			renderJson("errMsg",5);
			//getModel(User.class).update();
	}
	/**
	 * 跳转到VIP下载文章资源界面
	 */
	public void toVipDownLoadPage(){
		
		int aid = getParaToInt("aid");
		String vip = getAttr("data");
		System.out.println("测试vip了"+vip);
		setAttr("article", articleService.findById(aid));
		render("/index/toVipDownLoadPage.html");
	}
	/**
	 * 渲染用户修改文章的界面
	 */
	public void toModifyArticlePage(){
		//文章的分类
		setAttr("arcTypeList", arcTypeService.getArcTypeList());
		//根据文章的ID获取文章的信息
		setAttr("article", articleService.findById(getParaToInt()));
		setAttr("title", "修改文章资源");
    	render("/user/userArticleEdit.html");
	}
	/**
	 * 用户修改个人的文章资源
	 */
	public void editArticle(){
		Date publish_date = new Date();//文章添加时间
		getModel(Article.class).setPublish_date(publish_date).update();
        render("/user/userArticleManage.html");
	}
}
